<?php
/**
 * @APP@
 *
 * @package Page
 */
require_once 'App.php';
/**
 * トップページ
 *
 * <pre>
 * App_Page::onInject()で認証変数(_auth)をインジェクトしています。
 * 認証に応じてページをログイン済みページかゲストのページかに変えています。
 *
 * クリックイベント:
 *  onClickDelete() - 指定した記事を消去
 *  onClideLogout() - ログアウト処理
 *
 * </pre>
 *
 * @package Page
 * @author  $Author:$
 * @version SVN: Release: $Id:$
 */
class Page_Index extends App_Page
{
    /**
     * メッセージ
     *
     * @var string
     */
    public $_msg = '';

    /**
     * コンストラクタ
     *
     * @param array $config
     *
     * @return void
     */
    public function __construct(array $config){
        parent::__construct($config);
    }

    /**
     * インジェクト
     *
     * @return void
     */
    public function onInject()
    {
        parent::onInject();
        $this->_auth = BEAR::dependency('App_Auth')->get();
        $this->_header = BEAR::dependency('BEAR_Page_Header');
        $tab =  ($this->_auth) ? 'home' : 'public';
        $this->injectGet('tab', 'tab', $tab);
    }

    /**
     * ログアウトクリック
     *
     * @param array $args
     * @return void
     */
    public function onClickLogout(array $args)
    {
        $auth = BEAR::dependency('App_Auth');
        $auth->logout();
        $this->header->redirect('.');
    }

    /**
     * エントリー消去クリック
     *
     * 指定されたエントリーのIDを消去します。
     *
     * @param array $args
     *
     * @return void
     * @required click 消去エントリーID
     */
    public function onClickDelete(array $args)
    {
        $values = array('id' => $args['click'], 'user_id' => $args['auth']['id']);
        $params = array('uri' => 'Entry', 'values' => $values);
        $this->_resource->delete($params);
        $this->header->redirect('.'); //ページキャッシュ消去し再表示
    }

    /**
     * 初期化
     *
     * @param array $args
     *
     * @return void
     * @required tab
     */
    public function onInit(array $args)
    {

        $this->set('tab', $args['tab']);
        $this->set('msg', $this->_msg);
        $this->set('auth', $this->_auth);
        // 記事リソース取得
        (isset($args['auth'])) ? $this->_AsLoginUser($args) : $this->_AsGuest($args);
    }

    /**
     * ログインユーザートップ
     *
     * @param array $args
     *
     * @return void
     * @required tab
     */
    private function _AsLoginUser(array $args)
    {
        BEAR::dependency('App_Form_Entry')->build();
        $values = ($args['tab'] === 'home') ? array('user_id' => $args['auth']['id']) : array();
        $params = array('uri' => 'Entry/User/Top', 'values' => $values, 'options' => array('template' => '/list/entry'));
        $this->_resource->read($params)->set('entry');
        // followリソース
        $values['user_id'] = $args['auth']['id'];
        $params = array('uri' => 'User/Follower/From','values' => $values,'options' => array('injector'=>'onInjectCount'));
        $follow = array();
        $follow['from'] = $this->_resource->read($params)->getBody();
        // follow to
        $params['uri'] = 'User/Follower/To';
        $follow['to'] = $this->_resource->read($params)->getBody();
        $this->set('follow', $follow);

    }

    /**
     * ゲストユーザートップ
     *
     * @param array $args
     *
     * @return void
     * @required tab
     */
    private function _AsGuest(array $args)
    {
        //未ログイントップ
        $options = array('injector'=>array('BEAR_Agent_Injector', 'inject'));
        BEAR::dependency('App_Form_Login', array(), $options)->build();
        // Kumatterとは
        $this->_resource->read(array('uri' => 'App/about.txt'))->set('about');
        // 新着エントリー
        $options = array();
        $options['cache']['life'] = 60;
        $options['template'] = 'list/entry/guest';
        $params = array('uri' => 'Entry/Top', 'options' => $options);
        $ro = $this->_resource->read($params)->set('entry', 'lazy');
        // RSS（世界はクマってる）
        $options = array();
        $options['cache']['life'] = 60;
        $options['template'] = 'list/rss';
        $kumattaNews = 'http://news.google.com/news?hl=ja&ned=us&ie=UTF-8&oe=UTF-8&output=rss&q=%E5%9B%B0%E3%81%A3%E3%81%9F';
        $this->_resource->read(array('uri' => $kumattaNews, 'options' => $options))->set('rss', 'lazy');
        // お知らせ csvはキャッシュ無期限
        $options = array();
        $options['template'] = 'list/news';
        $this->_resource->read(array('uri' => 'App/news.csv', 'options' => $options))->set('news', 'lazy');

    }
    /**
     * アウトプット
     *
     * @reaturn void
     */
    public function onOutput()
    {
        $this->display();
    }

    /**
     * ログインフォームアクション
     *
     * @param array $submit
     *
     * @return void
     */
    public function onActionLoginForm(array $submit)
    {
        BEAR::dependency('App_Auth', $submit)->login($submit);
        BEAR::dependency('BEAR_Page_Header', $this->_header)->redirect('.');
    }

    /**
     * メッセージ投稿
     *
     * @param array $submit
     * @return void
     */
    public function onActionEntryForm(array $submit)
    {
        $auth = $this->_auth;
        $submit['user_id'] = $auth['id'];
        $params = array('uri' => 'Entry', 'values' => $submit);
        $this->_resource->create($params)->request();
        $this->clearPageCache();
        BEAR::dependency('BEAR_Page_Header', $this->_header)->redirect('.');
    }
}

// init/pageキャッシュ
$config = array();
//$config['cache']['type'] = 'init';
//$config['cache']['type'] = 'page';
//$config['cache']['life'] = 0;
App_Main::run('Page_Index', $config);